package com.etl.service;


import com.etl.entity.EtlBusinessDbInfo;
import com.etl.entity.EtlTaskMain;
import com.etl.model.rev.EtlTaskListRev;
import com.etl.model.rev.TableStructureRev;
import com.github.pagehelper.PageInfo;

import javax.websocket.Session;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;


/**
 * Created by Administrator on 2019/10/21.
 */

public interface IEtlTaskMainService {

    /**
     * 【接口】获取某系统下的所有任务
     *
     * @param etlTaskListRev
     * @return
     */
    PageInfo<EtlTaskMain> getAllTask(EtlTaskListRev etlTaskListRev);

    /**
     * 【接口】往任务表中添加一个任务
     *
     * @param table    抽取的表名
     * @param querySql 查询sql
     * @param batch  业务系统pid
     * @param comment  关于表的描述
     */
    void addTask(String table, String querySql, Integer batch,String comment,Integer tableType);

    /**
     * 【接口】更新任务
     *
     * @param etlTasksMain
     */
    void updateTask(EtlTaskMain etlTasksMain);

    /**
     * 【接口】执行单个任务
     * 区分与执行整批任务
     *
     * @param kid
     */
    void executeSingle(Long kid,String kettleHome,String kettleJobName);



    /**
     * 【接口】执行单个任务
     * 区分与执行整批任务
     *
     * @param kid
     */
    void socketExecuteSingle(Session session, Long kid);

    /**
     * 延时执行批次下的所有任务
     * 也就是将任务插入到定时任务表中，等待扫描器扫描并执行
     */
    void delayExecuteAll(Integer batch);


    /**
     * 【接口】执行批次下所有任务
     *
     * @param batch
     */
    void executeAll(Integer batch, String accountName);


    /**
     * 删除任务和表结构
     *
     * @param kid
     * @param type
     */
    void removeTaskAndTable(Long kid, Integer type);



    /**
     * 【接口】返回查询结果集
     *
     * @param sql
     * @param dbInfo
     * @throws SQLException
     */
    Map<String, List<Map<String, Object>>> executeQuery(String sql, EtlBusinessDbInfo dbInfo) throws SQLException;

    /**
     * 【接口】执行sql没有结果集
     *
     * @param sql
     * @param dbInfo
     * @throws SQLException
     */
    void executeSql(String sql, EtlBusinessDbInfo dbInfo) throws SQLException;

    /**
     * 【接口】在源数据库中查询10条记录返回
     *
     * @param tableName
     * @param batch
     * @return
     */
    Map<String, List<Map<String, Object>>> executeSql(String tableName, String batch);


    /**
     * 【接口】使用字符串在数据库中创建一张表
     *
     * @param tableStructure 新建表结构
     */
    void createTable(TableStructureRev tableStructure);

    /**
     * 查询表是否存在
     *
     * @param batch
     * @param tableName
     * @return
     */
    Integer findTableByTableName(Integer batch, String tableName);


}
